// !#1 格式化时间的
// Date 就表示日期类型的对象

const padZero = (num: number): string => {
  // 如果不满足 2 位，前面补 0
  return num.toString().padStart(2, '0')
}

const formatTime = (time?: string | Date): string => {
  // 如果 time 没有传递，就是当前时间
  if (typeof time === 'undefined') time = new Date()

  // 如果传递的是字符串，要把字符串转成日期对象
  if (typeof time === 'string') time = new Date(time)

  // 走到这，一定是一个日期对象

  const h = time.getHours()
  const m = time.getMinutes()
  const s = time.getSeconds()

  return `${padZero(h)}:${padZero(m)}:${padZero(s)}`
}

// !#2 定义一下数据的类型
/* interface IList { count: number; time: string }
const list: IList[] = [] */
type TList = { count: number; time: string }[]
const list: TList = []

// !#3 封装获取本地数据的方法
const LIST = 'LIST'
// const getData = (): TList => {
const getData = () => {
  // list 的类型可能是 string | null
  const list: string | null = localStorage.getItem(LIST)
  // JSON.parse 只能接收 string，第一种方式使用断言
  // return JSON.parse(list as string)
  // 断言的目的是为了保证有提示：getData()[0].
  return JSON.parse(list || '[]') as TList
}

// !#4 存储数据到本地的方法
const setData = () => {
  // [{ count: 1, time: '10:28:33' }, { count: 2, time: '10:28:33' }]
  // 在本地数据的基础上添加一条数据
  const originList = getData()
  originList.push({
    count: originList.length ? originList[originList.length - 1].count + 1 : 1,
    time: formatTime()
  })
  localStorage.setItem(LIST, JSON.stringify(originList))
}

// setData() // 测试





export { }
